
'''
知识点：eval()[https://www.runoob.com/python/python-func-eval.html]
    eval() 函数用来执行一个字符串表达式，并返回表达式的值。

json[https://www.runoob.com/python/python-json.html]
    函数	描述
    json.dumps	将 Python 对象编码成 JSON 字符串
    json.loads	将已编码的 JSON 字符串解码为 Python 对象

Python join()方法[https://www.runoob.com/python/att-string-join.html]
    Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串
    语法
    join()方法语法：

    str.join(sequence)

使用zip()函数 （推荐）
    name_list = ['张三', '李四', '王五']
    age_list = [54, 18, 34]
    for name, age in zip(name_list, age_list):
        print(name, ':', age)
====================
python3 读取csv文件报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0，解决方式
    代码为：

    with open(“file”, 'r', encoding="UTF-8") as f
    现象：

    运行时一直报错：UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte

    在网上找了很多方法，包括把utf-8 改成gbk，但仍会报类似的错，最后发现跟csv文件本身的编码格式有关。

     
    解决过程：

    1、先用记事本打开csv文件，若是乱码，可将文件另存为，在另存为的页面将编码格式改为utf-8，保存。

    2、若1另存为的文件仍是乱码，可新建一个TXT文档，将文档的后缀改为csv，然后把内容填入，保存。

    3、再把utf-8改为gbk，解决。
    ————————————————
    版权声明：本文为CSDN博主「cxh6300」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
    原文链接：https://blog.csdn.net/cxh6300/article/details/90455294

'''

'''
目标是：把多sku转为多个商品
c初级目标：把三规格改为2规格，实现方法：删除第一部分的三节点中的第一个无用节点，同时在第二部分 剔除第一节点的无用节点名
'''

#读取csv文件

import csv,json
import sys
import Write_excel


class rend_csv_file():
    def __init__(self, data):
        self.data = data
        self.list=[]
        self.write=Write_excel.write_text_to_excel()
        self.write.set_sheetName_and_setTitleName('sheet', ['选中序号A、B、C、D','ID', '颜色分类A','dataA','颜色分类B', 'dataB','颜色分类C', 'dataC'])

    def get_json(self):
        data_list = []
        self.n = 1  # 写入excel的行号
        with open(self.data,newline='',encoding='UTF-8') as csvfile:
            rows=csv.reader(csvfile)
            for row in rows:
                self.row=row
                if rows.line_num !=1:#去掉表头
                    self.list.append(row)
            for item,i in zip(self.list,range(len(self.list))):

                json_data=json.loads(item[12])#输出 列表中第6列的json格式元素
                print("循环到第%d个"%i,item[0],json_data[0])
                if i==12:
                    print()
                    print()
                #先获取到第一部分 1/3的无用节点
                key=list(json_data[0].keys())[0] #'dataRows'
                dataRows=json_data[0][key]

                data=self.Output_Excel(dataRows)
                self.wrint_text(data)
                self.n += 1

                print()

                self.delete_name(json_data[1])
            self.write.save_file('测试表.xlsx')


    def wrint_text(self,data):
        for text,i in zip(data,range(len(data))):
            print(self.n,i)
            self.write.write_data(self.n,i,text)
        # self.write.save_file('测试表.xlsx')
        print()

    def Output_Excel(self,dataRows):
        '''
        :param dataRows:传入第一个节点的三项选项，让用户选择要删除三项中哪一个无用的选项
        :return:
        '''
        keys=list(dataRows[0].keys())
        dataRows_len = dataRows.__len__()
        print('这个商品规格有%s项，分别是:'%dataRows_len)
        dataList=[]
        temp_list=[]
        dataList.append('')
        dataList.append(self.row[28])
        for i in dataRows:
            print(i[keys[0]])
            dataList.append(i[keys[0]])
            list_tmp=[]
            for it in i[keys[1]]:
                key=list(it.keys())
                print(it[key[0]])
                list_tmp.append(it[key[0]])
            dataList.append(str(list_tmp))
        return dataList



        #xls.write_data([['第一行第一列','第一行第二列','第一行第三列'],['第二行第一列','第二行第二列','第二行第三列'],['第三行第一列','第三行第二列','第三行第三列']])




    def delete_name(self,list):
        '''
        :param list: 传入第二节点 28个list,对其进行 名称的修改，修改项是：第一节点需要删除的那部分内容在本列表名称中删除，只保留影响价格本身的选项名称
        :return:
        '''
        pass



if __name__ == '__main__':

    rend_csv_file = rend_csv_file(r'/Users/zhangdingqu/Documents/CSV/门帘测试2.csv')
    rend_csv_file.get_json()
